#pragma once

#include "space\types.h"
#include "space\property_container.h"
#include "space\component.h"
#include "space\reference_tracker.h"

#include <vector>
#include <map>
#include <mutex>
#include "space\simple_factory.h"

using namespace space;

namespace space {
	class entity : 
		public bit<entity>,
		public reference_tracker<entity>,
		public simple_factory
	{

	public:
		entity(u_int64 id, std::string name);
		entity(std::string name);
		entity(u_int64 id);
		entity();
	
		DECLARE_MEMBER(bool, valid);
	};
	typedef shared_ptr<entity> entity_ptr;
};